/**
 * Created by zhangjing on 2018/3/7.
 */
var models=require('../models');

var user=models.User;
var utility=require('utility');
var uuid=require('node-uuid');

/**
 * 根据用户名列表查找用户列表
 * Callback:
 * - err, 数据库异常
 * - users, 用户列表
 * @param {Array} names 用户名列表
 * @param {Function} callback 回调函数
 */

exports.getUserByNames=function (names,callback) {
    if (names.length===0){
        return callback(null,[]);
    }
    user.find({loginname:{$in:names}},callback);
}

/**
 * 根据登录名查找用户
 * Callback:
 * - err, 数据库异常
 * - user, 用户
 * @param {String} loginName 登录名
 * @param {Function} callback 回调函数
 */

exports.getUserByLoginName=function (name,callback) {
    user.find({'loginname': new RegExp('^'+loginName+'$', "i")},callback);
}

/**
 * 根据用户ID，查找用户
 * Callback:
 * - err, 数据库异常
 * - user, 用户
 * @param {String} id 用户ID
 * @param {Function} callback 回调函数
 */

exports.getUserById=function (id,callback) {
    if (!id){
        return callback();
    }
    user.find({_id:id},callback);
}
/**
 * 根据邮箱，查找用户
 * Callback:
 * - err, 数据库异常
 * - user, 用户
 * @param {String} email 邮箱地址
 * @param {Function} callback 回调函数
 */
exports.getUserByMail=function(email,callback) {
    user.find({email:email},callback);
}
/**
 * 根据用户ID列表，获取一组用户
 * Callback:
 * - err, 数据库异常
 * - users, 用户列表
 * @param {Array} ids 用户ID列表
 * @param {Function} callback 回调函数
 */
exports.getUsersByIds = function (ids, callback) {
    user.find({'_id': {'$in': ids}}, callback);
};
/**
 * 根据关键字，获取一组用户
 * Callback:
 * - err, 数据库异常
 * - users, 用户列表
 * @param {String} query 关键字
 * @param {Object} opt 选项
 * @param {Function} callback 回调函数
 */
exports.getUserByQuery=function (query,opt,callback) {
    user.find(query,'',opt,callback);
}

/**
 * 根据查询条件，获取一个用户
 * Callback:
 * - err, 数据库异常
 * - user, 用户
 * @param {String} name 用户名
 * @param {String} key 激活码
 * @param {Function} callback 回调函数
 */
exports.getUserByNameAndKey = function (loginname, key, callback) {
    user.findOne({loginname: loginname, retrieve_key: key}, callback);
};

exports.newAndSave=function (name,loginname,pass,email,avatar_url,active,callback) {
    var user=new User();
    user.name=name;
    user.loginname=loginname;
    user.pass=pass;
    user.email=email;
    user.avatar=avatar_url;
    user.active=active||false;
    user.accessToken=uuid.v4();

    user.save(callback);
}

var makeGravatar=function (email) {
    return 'http://www.gravatar.com/avatar/' + utility.md5(email.toLowerCase()) + '?size=48';
}
exports.makeGravatar=makeGravatar;

exports.getGravatar=function (user) {
    return user.avatar||makeGravatar(user)
}
